コマンド

概要

  • コマンドを定義して、エクステンションに実装したコマンドハンドラと関連付けることで、リボンの拡張ポイントなどから独自処理を呼び出せます。
  • コマンドの有効/無効条件として、モデルの選択状態やモデルのクラス、対象のビュー定義を指定できます。

コマンドの詳細

  • プロパティ

    キー 説明 値域
    必須か
    id コマンドを一意に識別する ID。配置されている全エクステンションでユニークな文字列 IDを表す文字列 必須
    title コマンドのタイトル1 任意の文字列 -
    description コマンドの説明1 任意の文字列 -
    group コマンドが属するグループ1 グループ名を表すの文字列 -
    execFunc エントリーポイントに実装されるコマンドハンドラ名 関数名/メソッド名を表す文字列 必須
    canExecWhen コマンドの有効条件。詳細は下位プロパティの通り オブジェクト -
    canExecWhen.uiState UIの状態を表す次のいずれかの値。
    Always: 常に有効(プロパティ省略時の既定値)。
    ProjectOpened: プロジェクトが開いている場合に有効。
    ModelSelected: モデルが選択されている場合に有効。
    ModelSelectedInEditor: エディタ上でモデルが選択されている場合に有効。
    "Always", "ProjectOpened", "ModelSelected", "ModelSelectedInEditor" -
    canExecWhen.profiles 対象プロジェクトのプロファイル名 プロファイル名を表す文字列 -
    canExecWhen.metamodels 選択されているモデルのクラス名、もしくは、その継承元クラス名。値に * を指定、もしくは、プロパティを省略すると全モデルで有効。uiState プロパティが ModelSelected, ModelSelectedInEditor 以外の場合は無視されます。 "*"、または、クラス名を表す文字列。複数の場合はカンマ区切りで指定。 -
    canExecWhen.viewDefinitions 対象のビュー定義名。値に * を指定、もしくは、プロパティを省略すると全ビュー定義で有効。uiState プロパティが ModelSelectedInEditor 以外の場合は無視されます。 "*"、または、ビュー定義名を表す文字列。複数の場合はカンマ区切りで指定。 -
    canExecFunc コマンドの有効条件を評価する関数名。2 canExecWhen と同時に設定された場合はこちらが優先されます。ただし、.NET DLL 方式のエクステンションでのみ設定した関数が評価されます。3 関数名/メソッド名を表す文字列 -

コマンドの定義例

{
    "extensionPoints": {

        "commandGroups" :
        [
            {
                "name": "codegen",
                "title": "コード生成"
            }
        ],

        "commands" :
        [
            {
                "id": "myExtension.generateCode",
                "title": "Generate Code",
                "description": "generate code description",
                "group": "codegen",
                "execFunc": "GenerateCode",
                "canExecWhen" :
                {
                    "uiState": "ModelSelected",
                    "metamodels": "FunctionalComponent,Component",
                    "viewDefinitions": "*"
                }
            },
            {
                "id": "myExtension.checkError",
                "execFunc": "CheckError"
            }
        ]
    }
}

コマンドハンドラの実装例

public void GenerateCode(ICommandContext commandContext, ICommandParams commandParams)
{
    // コマンドハンドラの実装コード
}

コマンドパラメータの使用例

エクステンションの内部からマニフェストの拡張ポイントに定義されているコマンドを実行する場合、パラメータを指定できます。

void ExcecSomeCommands()
{
    // パラメータを生成
    var execParams = App.CreateCommandParams();
    execParams.AddParam("value1");                          // execParams[0] で値参照可能
    execParams.AddParam("value2");                          // execParams[1] で値参照可能
    // execParams.AddParamWithName("param1", "value1");     // execParams["param1"] で値参照可能
    // execParams.AddParamWithName("param2", "value2");     // execParams["param2"] で値参照可能

    // パラメータ指定でコマンドを実行する
    App.ExecuteCommand("otherExtension.someCommand", execParams);
}

    • 現バージョンではエクステンションの動作に影響せず表示もされません。

    • canExecFunc に設定可能な関数のシグネチャは次の通りです。bool function-name(ICommandContext context, ICommandParams parameters)。設定された関数が見つからない場合は false と評価されます。

    • スクリプト方式のエクステンションで canExecFunc を設定した場合は常に true と評価されます。スクリプト方式のエクステンションでは canExecWhen のみを設定してください。